-
Notifications
You must be signed in to change notification settings - Fork 1.4k
[OLD] Apple: Enable building as an Apple Framework #2969
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: dev
Are you sure you want to change the base?
Conversation
bc56f55 to
5f321b9
Compare
|
Filed as internal issue #USD-9360 |
|
/AzurePipelines run |
|
Azure Pipelines successfully started running 1 pipeline(s). |
1664609 to
4a0f035
Compare
|
/AzurePipelines run |
|
Azure Pipelines successfully started running 1 pipeline(s). |
|
@dgovil Could I ask you to pop in a note that reports when you are building a framework here? |
|
/AzurePipelines run |
|
Azure Pipelines successfully started running 1 pipeline(s). |
|
Apologies @dgovil I was meaning to merge locally and got the <- -> icons backwards in the interface. Please force push to overwrite my inadvertent commit when you are ready to update. |
e07ce73 to
352d4d6
Compare
|
@meshula I rebased the latest on top of dev+ios_core PR. I overwrote your changes to my branch. |
|
Thanks for fixing the mishap and adding the Mx bits! |
352d4d6 to
947efa1
Compare
|
/AzurePipelines run |
|
Pull request contains merge conflicts. |
390e3af to
8d23ab3
Compare
|
/AzurePipelines run |
|
Pull request contains merge conflicts. |
|
Currently refactoring this on top of the iOS imaging branch and the latest dev, so in flux for the moment. |
|
/AzurePipelines run |
|
Pull request contains merge conflicts. |
|
/AzurePipelines run |
|
Pull request contains merge conflicts. |
|
Rebased this PR on the imaging branch. It is still possible to build as a non-monolithic build, but I am not focusing on that setup because frameworks expect a single dylib per framework and we'd have something like ~70 frameworks going that route. Instead, long term, we can work with each dependency to add monolithic+framework builds to them as well, and then tease things apart here. It also allows for building for simulator (but isn't super well tested) My todos before I think this is ready is: [] Make sure the USD build can load all the plugins that are part of it. Specifically HD etc... Potentially, I want to see if its possible to modify the headers to avoid needing to add the header search path manually. |
|
Looking promising!
If you can solve that one, that would be fantastic! Could I ask you to drop a link in to point us at
Given the evolution of the ios + imaging work, it would be helpful to have a link to the branch out here in the main thread. |
|
Yep, added a link to the main body above but also adding it here #3215 |
|
/AzurePipelines run |
|
Azure Pipelines successfully started running 1 pipeline(s). |
|
/AzurePipelines run |
|
Azure Pipelines successfully started running 1 pipeline(s). |
4f54b2a to
47da75e
Compare
|
/AzurePipelines run |
|
Azure Pipelines successfully started running 1 pipeline(s). |
|
/AzurePipelines run |
|
Azure Pipelines successfully started running 1 pipeline(s). |
|
/AzurePipelines run |
|
Azure Pipelines successfully started running 1 pipeline(s). |
12c2357 to
0729140
Compare
d1bf209 to
50f2977
Compare
|
/AzurePipelines run |
|
Azure Pipelines successfully started running 1 pipeline(s). |
|
|
||
| if context.buildTarget == apple_utils.TARGET_VISIONOS: | ||
| # Create visionOS config from iOS config | ||
| if MacOSTargetEmbedded(context) and context.buildTarget != apple_utils.TARGET_IOS: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
When GCD is available as a work backend let's get rid of this patching on vision os
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The GCD work will still require TBB for the data constructs unfortunately
| the file does not match. | ||
| Returns the absolute path to the directory where files have | ||
| Returns the absolute path to the directory where files have |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
let's get ws fixes out of this pr
| cmakeOptions = ['-DMATERIALX_BUILD_SHARED_LIBS=ON', | ||
| '-DMATERIALX_BUILD_TESTS=OFF' | ||
| ] | ||
| cmakeOptions = ['-DMATERIALX_BUILD_TESTS=OFF'] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
rebase on 25.05 some of this will disappear
| default=codesignDefault, action="store_true", | ||
| help=("Enable code signing for macOS builds " | ||
| "(defaults to enabled on Apple Silicon)")) | ||
| group.add_argument("--codesign-id", dest="macos_codesign_id", type=str) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
can we clean up code signing separately?
| buildMayapyTests=("On" if context.buildMayapyTests else "Off"), | ||
| buildAnimXTests=("On" if context.buildAnimXTests else "Off"), | ||
| enableHDF5=("On" if context.enableHDF5 else "Off")) | ||
| enableHDF5=("On" if context.enableHDF5 else "Off"), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
we're dropping hdf5 support anyway
| endif() | ||
|
|
||
| # Setup CCache for C/C++ compilation | ||
| if(PXR_ENABLE_COMPILER_CACHE) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
different PR
| #else | ||
| #define ARCH_OS_OSX | ||
| #endif | ||
| #if TARGET_OS_SIMULATOR |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
separate PR?
| _AppendPathList(&result, buildLocation, binaryPath); | ||
| _AppendPathList(&result, pluginBuildLocation, binaryPath); | ||
|
|
||
| #ifdef PXR_BUILD_APPLE_FRAMEWORK |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
can we configure this in cmake to eliminate the ifdef here
| } | ||
| else { | ||
| metalColorAttachment.loadAction = | ||
| metalColorAttachment.loadAction = |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
separate
Edit: As requested by @meshula , I'll be splitting up this PR into the smaller constituent parts so we can land them individually.
I will list them here so it's easy to follow along with progress. I am listing the proposed bits here, and will link them to actual PRs as they go up. These are listed in no particular order. They will be checked off as they are merged.
They are nested based on their dependencies
-framework OpenUSDDescription of Change(s)
This PR enables building of USD as a Framework.
A framework build puts the output files into a directory structure which allows them to be included easily in apps on macOS, iOS and visionOS. The steps to use it are included in the README but are repeated here in brief:
Frameworks are enabled automatically for Apple embedded platforms (iOS, visionOS).
Framework builds default to Monolithic because a framework may only include one dylib within it. Shared builds can still be enabled for some dev purposes, but aren't officially supported.
Experimental Feature
I request that the feature be marked as Experimental in the README, because I anticipate changes might be needed in the future to streamline how this works, such as not requiring the dependencies to be statically built. I think the current state of the PR will unblock the majority of people asking for this feature however and the changes I anticipate might be quite long term.
This incorporates some work by Maddy Adams and @meshula . The changes are largely non-invasive and are listed below:
Core Code Changes
Build Script Changes
--build-apple-frameworkand--no-build-apple-framework--prefix-framework-headersto opt-in to prefixing the headersapple_utils.pyto orchestrate anXCFrameworkbuild, that combines multiple targets into one framework.Header Notes
Framework headers are automatically discovered when prefixed by the framework name.
This requires the user to build with
--prefix-framework-headersE.g instead of
#include <pxr/pxr.h>you would do#include <OpenUSD/pxr/pxr.h>If someone wants to avoid the prefixed behavior, they have to manually add the Header directory to their targets
SYSTEM_HEADER_SEARCH_PATHS.